基于Hadoop集群支持Delta Lake或Hudi存储机制

Delta Lake和Hudi是数据湖方案中常用的存储机制,为数据湖提供流处理、批处理能力。MaxCompute基于开源的Hadoop集群提供了支持Delta或Hudi存储机制的湖仓一体架构。您可以通过MaxCompute查询到实时数据,即时洞察业务数据变化。

背景信息

MaxCompute基于开源的Hadoop集群和阿里云EMR(E-MapReduce)提供了支持Delta Lake或Hudi存储机制的湖仓一体架构,架构图如下。

image..png

涉及模块

对应阿里云产品

说明

开源Hadoop

原始数据存储在Hadoop集群中。

基于Hadoop集群支持Delta Lake或Hudi湖仓一体架构

前提条件

已创建MaxCompute项目(非External Project)。具体操作请参见创建MaxCompute项目

使用限制

基于Hadoop集群支持Delta Lake或Hudi存储机制湖仓一体方案,使用限制如下:

仅华东1(杭州)、华东2(上海)、华北2(北京)、华南1(深圳)、中国香港、新加坡和德国(法兰克福)地域支持构建湖仓一体能力。

操作流程

本文以阿里云EMR的Hadoop集群为例,构建Hadoop集群的湖仓一体。操作流程如下:

  1. 步骤一:创建EMR集群

    若已有本地机房搭建或云上虚拟机搭建的Hadoop集群,无需再次创建。

  2. 步骤二:准备数据

    在集群中创建数据库,准备数据。

  3. 步骤三:基于MaxCompute实时分析Hadoop集群数据

    通过DataWorks控制台的数据湖集成界面创建External Project,对Hadoop集群数据进行分析。

步骤一:创建EMR集群

  1. 在EMR控制台创建Hadoop集群。

    创建Hadoop集群的具体操作请参考创建EMR集群。在创建Hadoop集群的过程中,您需要重点关注以下配置项,其余配置项可参考EMR集群:

    配置区域

    配置项

    示例

    描述

    软件配置

    业务场景

    自定义集群

    请根据实际需求选择业务场景。

    产品版本

    EMR-3.43.0

    选择基于Hadoop 2.x和Hive 2.x构建的EMR-3.x版本。

    可选服务

    Hadoop-Common、HDFS、Hive、YARN、Spark3、DeltaLake、Hudi、ZooKeeper

    选择相关的Hadoop、HDFS、Hive、Spark、DeltaLake及Hudi组件,被选中的组件会默认启动相关的服务进程。

    元数据

    内置MySQL

    选择内置MySQL或者自建RDS

    • 自建RDS:表示使用自建的阿里云RDS作为元数据库。

      选择该方式时,需要配置相关的数据库连接参数,详情请参见配置自建RDS

    • 内置MySQL:表示元数据存储在集群本地环境的MySQL数据库中。

      说明

      仅限在测试场景下使用该方式,生产场景建议选择自建RDS

  2. 集群创建成功后,单击目标集群操作列的节点管理

  3. 节点管理页面,单击emr-master节点组下的目标节点ID,进入ECS控制台。

  4. 选择合适的工具,连接节点ECS实例,详情请参见连接方式概述

    说明

    本文使用Workbench远程连接实例,登录密码为创建集群时所设置的密码。

步骤二:准备数据

登录集群后,可以通过Spark SQL方式创建Delta Lake表和Hudi表。

  1. E-MapReduce的Hudi 0.8.0版本支持Spark SQL对Hudi进行读写操作,详情请参见Hudi与Spark SQL集成。本文以创建Hudi表为例,在终端输入如下命令启动spark-sql。

    spark-sql \
    --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
    --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
  2. 进入spark-sql后,建表并插入数据,命令如下。

    说明

    若没有新建数据库,则默认数据会被存储在default库中。

    -- 建表
    create table h0 (
      id bigint,
      name string,
      price double,
      ts long
    ) using hudi
    tblproperties (
      primaryKey="id",
      preCombineField="ts"
    );
    
    -- 插入数据
    insert into h0 values (1, 'a1', 10, 1000);
    
    -- 查表
    select id, name, price, ts from h0;

步骤三:基于MaxCompute实时分析Hadoop集群数据

基于已创建的MaxCompute项目以及Hadoop集群表数据,创建External Project,用于Hadoop集群,并映射至已创建的MaxCompute项目。后续可通过映射的MaxCompute项目对External Project进行数据分析操作。仅MaxCompute项目的所有者(Project Owner)或具备Admin、Super_Administrator角色的用户可以创建External Project。

说明

Tenant的Super_Administrator角色可以在MaxCompute控制台的用户管理页签授权。仅主账号或已经拥有Tenant的Super_Administrator角色的子账号可以操作授权。详情请参见将角色赋予用户

  1. 在DataWorks控制台创建External Project。

    1. 登录DataWorks控制台,选择地域。

    2. 在DataWorks控制台页面左侧导航栏,单击数据湖集成(湖仓一体)

    3. 数据湖集成(湖仓一体)页面,单击现在开始创建

    4. 新建数据湖集成页面,按照界面指引进行操作。参数示例如下所示。

      表 1. 创建数据仓库

      参数

      说明

      外部项目名称

      例如:test_extproject_ddd。

      MaxCompute项目

      例如:test_lakehouse。

      表 2. 创建外部数据湖连接

      参数

      说明

      异构数据平台类型

      选择阿里云E-MapReduce/Hadoop集群

      网络连接

      选择已创建的网络连接。操作详情请参见创建外部数据湖连接

      选择外部数据源

      选择已创建的外部数据源。操作详情请参见创建外部数据湖连接

      表 4. 创建目标数据映射

      参数

      说明

      选择外部数据源对象

      默认与选择外部数据源一致。

      映射目标数据库

      Hadoop集群目标数据库。

    5. 单击完成创建并预览后,单击预览。如果能预览Hadoop集群中数据库表的信息,则表示操作成功。

      说明

      上述使用的External Project是在DataWorks控制台创建的,如果您需要通过SQL方式管理External Project,请参见使用SQL管理外部项目

  2. 在DataWorks临时查询页面,新建ODPS SQL节点,查看External Project下的表。命令示例如下。

    show tables in test_extproject_ddd;
    
    -- 返回结果如下
    ALIYUN$***@test.aliyunid.com:h0
    说明

    DataWorks临时查询操作请参见使用临时查询快速查询SQL(可选)

  3. 在DataWorks临时查询页面,查询External Project的表数据。命令示例如下。

    select * from test_extproject_ddd.h0;

    返回结果:image..png

  4. 通过Workbench登录Hadoop集群,进入Spark SQL的终端,在命令执行区域,输入SQL语句更新h0表中的数据。命令如下。

    insert into h0 values (2, 'a2', 11, 1000);
  5. 在DataWorks临时查询页面,查看数据更新结果。命令示例如下。

    select * from test_extproject_ddd.h0 where id ='2';

    返回结果:image..png

相关文档